# coding:utf-8
'''
线性回归练习
'''
import numpy as np
import tensorflow as tf
# 生成数据
x_train=np.linspace(-1,1,101)
y_train=2*x_train+np.random.randn(*x_train.shape) # *为关键字参数,当参数数量不固定的时候，各个参数组成一个元组传入

# 构建tf静态图占位变量，需要数据的则定义占位变量
x=tf.placeholder(dtype=tf.float32,name='x')
y=tf.placeholder(dtype=tf.float32,name='y')
# 定义变量，需要迭代或者优化的就定义变量
w=tf.Variable(0.0,name='weights',dtype=tf.float64) # 权重矩阵初始值
b=tf.Variable(0.0,name='bias',dtype=tf.float64)
# 定义模型
def model(x,w,b):
    return tf.multiply(x,w)+b
# 输出仿真值
y_model=model(x_train,w,b)
# 定义损失
cost=tf.reduce_mean(tf.square(y_model-y_train))
# 定义优化器
train_op=tf.train.AdamOptimizer(1).minimize(cost)
# 创建绘画
with tf.Session() as sess: # with相当于java中的finally，始终会执行
    tf.global_variables_initializer().run()# 初始化所有变量
    feed_dict={
        x:x_train,
        y:y_train
    } # 向占位符里面喂数据
    for i in range(50): # 迭代训练
        sess.run(train_op,feed_dict=feed_dict)
        print("i:%d,w:%g,cost:%g"%(i+1,sess.run(w),sess.run(cost)))
        print('----------------------')




